package com.wkbb.basic.service;

import com.github.pagehelper.PageInfo;
import com.wkbb.basic.model.DeviceInfo;
import com.wkbb.basic.vo.DeviceConfigVo;
import com.wkbb.common.base.BaseService;
import com.wkbb.common.dto.ResultDTO;
import com.wkbb.common.dto.basic.DeviceInfoDto;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * @author Alger Yang
 */
public interface DeviceInfoService extends BaseService<DeviceInfo> {

    /**
     * 批量删除设备
     *
     * @param ids      设备表ID
     * @param deleteBy 操作人
     */
    @Transactional(rollbackFor = Exception.class)
    void delete(List<Long> ids, String deleteBy) throws Exception;

    /**
     * 获取设备详情
     *
     * @param params 设备表ID
     * @return 设备详情
     */
    DeviceInfoDto getDtoByParams(Map<String, Object> params);

    /**
     * 获取dto列表
     */
    List<DeviceInfoDto> getDtoListByParams(Map<String, Object> params) throws Exception;

    /**
     * 获取dto分页列表
     */
    PageInfo<DeviceInfoDto> getDtoPageByParams(Map<String, Object> params, Integer pageNo, Integer pageSize) throws Exception;

    /**
     * 通过设备编号获取设备信息
     *
     * @param deviceCode 设备编号
     * @return 设备信息
     */
    DeviceInfo getInfoByDeviceCode(String deviceCode) throws Exception;

    /**
     * 通过设备编号获取设备初始化信息
     *
     * @param deviceCode 设备编号
     * @return 设备初始化信息
     */
    DeviceConfigVo getConfigByDeviceCode(String deviceCode) throws Exception;

    /**
     * 查询设备和学校信息
     *
     * @param parms
     * @throws Exception
     */
    PageInfo<DeviceInfoDto> getDeviceInfoListByParams(Map<String, Object> parms, Integer pageNo, Integer pageSize) throws Exception;

    /**
     * 修改设备配置信息
     *
     * @param ids
     * @param level
     * @param faceSimilar
     * @param attendanceSwitch
     * @param updateName
     * @throws Exception
     */
    void updateDeviceConfigBatch(List<Long> ids, Integer level, Integer faceSimilar, Short attendanceSwitch, String updateName) throws Exception;

    /**
     * 设备上传自身信息
     * @param webank 是否微众设备
     * @param live 是否微众活体
     */
    ResultDTO<Object> uploadDeviceInfo(String deviceCode, String softVer, String hardVer, String serial, Boolean webank, Boolean live, Boolean binocularOrMonocularCamera ,String apiVersion) throws Exception;

    /**
     * 修改设备信息
     *  @param oldDevice 旧信息
     * @param newDevice 新信息
     * @return
     */
    ResultDTO<Object> update(DeviceInfo oldDevice, DeviceInfo newDevice) throws Exception;
}
